package demo01;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

/*
 *  java.lang.Object类
 *  类 Object 是类层次结构的根(最顶层)类。每个类都使用 Object 作为超(父)类。
 *  所有对象(包括数组)都实现这个类的方法。
 */
public class Demo01ToString {
    public static void main(String[] args) {
        /*
         *  Person类默认继承了Object类，所以可以使用Object类中的toString方法
         *  String toString() 返回该对象的字符串表示。
         */
        Person p = new Person("土司鸡", 5);
        String s = p.toString();
        System.out.println(s);
        // 重写toString方法前：demo01.Person@ee7d9f1，结果格式为：包路径+对象名+@地址值
        // 重写toString方法后：Person [age=5, name=土司鸡]，结果格式为自定义的格式

        // 直接打印对象名字，其实就是调用对象的toString方法，p = p.toString()
        System.out.println(p);
        // 重写toString方法前：demo01.Person@ee7d9f1
        // 重写toString方法后：Person [age=5, name=土司鸡]

        /*
         *  看一个类是否重写了toString方法，直接打印该类对应的对象的名字即可
         *  如果没有重写toString方法，那么打印的就是对象的地址值(默认)
         *  如果重写了toString方法，那么就按重写的方式打印
         */
        Random random = new Random();
        System.out.println(random); // java.util.Random@1edf1c96，没有重写toString

        Scanner scanner = new Scanner(System.in);
        System.out.println(scanner); // java.util.Scanner[delimiters=\p{javaWhitespace}+]...，重写了toString

        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(1);
        arrayList.add(2);
        System.out.println(arrayList); // [1, 2]，重写了toString
    }
}
